# [Spring] Bean Scope


image


Bean์˜ ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ๋งํ•˜๋Š” Bean Scope์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

Bean์€ ์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉํ•˜๋Š” POJO ๊ธฐ๋ฐ˜ ๊ฐ์ฒด๋‹ค.

์ƒํ™ฉ๊ณผ ํ•„์š”์— ๋”ฐ๋ผ Bean์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋„ ์žˆ๊ณ , ์–ด๋–ค ํ•œ ์‹œ์ ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•  ๋•Œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด Scope๋ฅผ ์„ค์ •ํ•ด์„œ Bean์˜ ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


์šฐ์„  ๋”ฐ๋กœ ์„ค์ •์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด, Spring์—์„œ Bean์€ Singleton์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ฒ˜๋Ÿผ ํŠน์ • ํƒ€์ž…์˜ Bean์„ ๋”ฑ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค๊ณ  ๋ชจ๋‘ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๋ณดํ†ต์€ Bean์„ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ, ์š”๊ตฌ์‚ฌํ•ญ์ด๋‚˜ ๊ตฌํ˜„์— ๋”ฐ๋ผ ์•„๋‹ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ Bean Scope๋Š” ์‹ฑ๊ธ€ํ†ค ๋ง๊ณ ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ์ง€์›ํ•ด์ค€๋‹ค.


# Scope ์ข…๋ฅ˜

  • # singleton

    ํ•ด๋‹น Bean์— ๋Œ€ํ•ด IoC ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌํ•œ๋‹ค.

  • # prototype

    ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • # request

    ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ HTTP Request์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌํ•œ๋‹ค.

  • # session

    ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ HTTP Session์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌํ•œ๋‹ค.

  • # global session

    ํ•ด๋‹น Bean์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ Global HTTP Session์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ๋งŒ ์กด์žฌํ•œ๋‹ค.

request, session, global session์€ MVC ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋งŒ ์‚ฌ์šฉํ•จ


Scope๋“ค์€ Bean์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ํด๋ž˜์Šค์— ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
 
@Scope("prototype")
@Component
public class UserController {
}


# [์ฐธ๊ณ  ์ž๋ฃŒ]

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM